#include "lru.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
 * 函数：模拟LRU页面置换算法。
 *
 * @param queue_frames 一个字符串，表示页面访问序列。
 *                     字符串中的每个字符是一个数字，表示一个页面号。
 * @param num_frames   页框的数量，表示物理内存中可用的页框数。
 */
void
lru_page_replacement (char *queue_frames, int num)
{
  // TODO
  int page_buf[num];
  int age[num];
  int replace_flag = 1;
  for (int i=0; i<num; i++) {
    page_buf[i] = -1;
    age[i] =0;
  }
  int queue[128];
  char *arr_str = queue_frames;
  char *token = strtok (arr_str, ",");
  int i = 0;
  int min = 0;
  int min_index = 0;
  while (token != NULL) {
    queue[i++] = atoi(token);
    token = strtok(NULL, ",");
  }
  for (int j=0; j<i; j++) {
    for (int k=0; k<num; k++) {
      if (page_buf[k] == queue[j]) {
        replace_flag = 0;
        age[k]++;
      }
      else {
        age[k]--;
      }
    }
    if (replace_flag) {
      min = age[0];
      min_index = 0;
      for (int j=1; j<num; j++) {
        if (min > age[j]) {
          min = age[j];
          min_index = j;
        }
      }
      page_buf[min_index] = queue[j];
      age[min_index] = 0;
    }
    replace_flag = 1;
    printf("Access:%d,Frames: [", queue[j]);
    for (int j=0; j<num-1; j++) {
      printf("%d,", page_buf[j]);
    }
    printf("%d]\n", page_buf[num-1]);
  }
}